#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct{
	int id;
	char name[20];
	int age;
}Stu;

//添加学生
void add_stu()
{
	Stu st;
	printf("请输入学生的学号：");
	while(scanf("%d",&st.id)!=1){
		while(getchar()!='\n');
		printf("输入错误，请重新输入：");
	}	
	
	//清除缓冲
	scanf("%*[^\n]");
	scanf("%*c");
	
	printf("请输入学生的姓名：");
	fgets(st.name,20,stdin);
	while(strlen(st.name)==19&&st.name[18]!='\n'){
		while(getchar()!='\n');
		printf("名字过长，请重新输入：\n");
	} 
	st.name[strlen(st.name)-1]='\0';
	
	printf("请输入学生的年龄：");
	while(scanf("%d",&st.age)!=1){
		while(getchar()!='\n');
		printf("输入错误，请重新输入：\n");
	}
	
	//将数据写入文件
	FILE *fp = fopen("stu.dat","a+");
	if(!fp){
		perror("fopen");
		return ;
	} 
	fwrite(&st,sizeof(Stu),1,fp);
	
	fclose(fp);
} 

//显示所有学生
void travel_stu()
{
	Stu st;
	
	FILE *fp = fopen("stu.dat","r+");
	if(!fp){
		perror("fopen");
		return ;
	}
	printf("学号\t姓名\t年龄\n");
	while(fread(&st,sizeof(Stu),1,fp)){
		printf("%d\t%s\t%d\n",st.id,st.name,st.age);
	}
	
	
} 


//菜单
void menu()
{
	int choice = 0;
	while(1){
		printf("1.添加学生\n");
		printf("2.显示所有学生\n");
		printf("3.退出\n");
		
		while(scanf("%d",&choice)!=1){
			while(getchar()!='\n');
			printf("输入错误，请重新输入：\n");
		}
		system("clear");  //执行clear命令
		switch(choice){
			case 1:
				add_stu();
				break;
			case 2:
				travel_stu();
				break;
			case 3:
				return;
			default:
				printf("无效选择！\n");
		} 
	}
}


int main()
{
	menu();
	return 0;
}